官方這段話的核心觀念很簡單,主要在說明 Bridge 是什麼和它的 MTU 如何決定:
核心功能 - L2 串連:
本身屬性 - 邏輯介面:
MTU 決定規則:
Cumulus Linux 處理 L2 橋接 (Bridge) 的兩種方法
以下是說明 Cumulus Linux 處理 L2 橋接 (Bridge) 的兩種方法,以及官方推薦哪一種。
兩種模式並存:
brctl)。它比較單純,通常是把所有介面綁在一起,對 VLAN 的處理比較不直覺 (e.g., 需額外建立 sub-interface eth0.10)。為什麼推薦 VLAN-aware:
相容性 (Co-existence):
當一個訊框 (frame) 透過介面進入橋接器時,交換器會學習 (learn) 該訊框的 MAC 位址,並將這個 MAC 位址記錄在橋接器表 (bridge table) 中。
橋接器透過查詢訊框的目標 MAC 位址,來將訊框轉發 (forward) 到其預定的目的地。
三件 L2 交換器最基本的工作:學習 (Learn)、轉發 (Forward) 和 老化 (Aging)。
如何學習
Server01 (MAC-A) 從 SWP3 送出封包,交換器就學到:MAC-A 在 SWP3 上。*如何轉發
如何老化 (Cumulus Specific)
root@spine01:/# nv show bridge domain br_default mac-table
age bridge-domain entry-type interface last-update mac src-vni vlan vni Summary
- ----- ------… ------… ------… -----… ------… -----… ---- --- -------
0 7 br_def… swp1 3039 0c:a2:… 10
1 0 br_def… swp1 10299 0c:16:… 1
2 10602 br_def… perman… swp1 10602 0c:ef:… 1
3 10602 br_def… perman… swp3 10602 0c:ef:…
4 4 br_def… swp4 10285 0c:03:… 30
5 10602 br_def… perman… swp4 10602 0c:ef:…
6 10602 br_def… perman… br_def… 10602 0c:ef:… 1
Linux bridge fdb 命令與 FDB 交互,網橋(bridge)使用 FDB 來儲存其學習到的 MAC 位址以及學習這些 MAC 位址的連接埠
| Keyword | Description |
|---|---|
| self | FDB 條目屬於 FDB 中被該設備所引用的設備本身。 |
| master | FDB 條目屬於該設備的主設備(Master) 上的 FDB,並且指向主設備的一個埠。例如:swp1 的 FDB 條目,但它指向的是其主設備(master) br_default 橋接器(aa:c1:ab:06:e9:89 dev swp1 master br_default permanent)。 |
| extern_learn | FDB 條目是由一個外部的控制平面(Control Plane)所管理的。最常見的例子就是 BGP EVPN。這表示這個 MAC 不是經由傳統的資料平面(data-plane)學習來的,而是 BGP 協定告訴系統的。 |
$ bridge fdb show
0c:a2:92:14:00:00 dev swp1 vlan 10 master br_default
0c:16:46:c4:00:01 dev swp1 vlan 1 master br_default
0c:ef:4b:1b:00:01 dev swp1 vlan 1 master br_default permanent
0c:ef:4b:1b:00:01 dev swp1 master br_default permanent
0c:ef:4b:1b:00:03 dev swp3 master br_default permanent
0c:03:d4:b3:00:00 dev swp4 vlan 30 master br_default
0c:ef:4b:1b:00:04 dev swp4 master br_default permanent
0c:ef:4b:1b:00:07 dev br_default vlan 1 master br_default permanent
0c:ef:4b:1b:00:07 dev br_default master br_default permanent
這是一種現代化的橋接設定方式,它讓一個 Linux 橋接器 (bridge) 能夠理解並處理 802.1Q VLAN 標籤。讓整個橋接器(Bridge)只運行一個 Spanning Tree Protocol (STP) 實例。
br10, br20),而是只需要建立一個單一的橋接器(例如 br_default),並讓這個橋接器自己來管理所有 VLAN。eth1 上 Trunk 100 個 VLAN,你必須在 Linux 系統中手動建立 100 個子介面 (e.g., eth1.10, eth1.20, eth1.21...),然後再把這些子介面一個個加入 Bridge。這非常笨重、設定檔超長,且極度消耗系統資源。eth1 是我的成員,它允許 VLAN 10-110 通過」。系統底層會用高效的「VLAN bitmaps」去處理,設定檔乾淨、效能高。Access Port 的 VLAN ID。Trunk Port 上,允許不帶標籤 (untagged)封包通過的那個 VLAN。Trunk Port 上允許通過的 VLAN 列表。VLAN 10 裡的 MAC_A 和 VLAN 20 裡的 MAC_A 是兩個完全不同的紀錄。雖然可以建立多個 Bridge,但它們必須是完全獨立且功能簡化的。在實務上,這代表應該盡量只用一個 Bridge。
核心概念:Bridge 之間必須完全隔離
功能限制:MLAG
這條是關鍵!如果你打算使用 Cumulus 最重要的 MLAG 功能(來做跨設備的 Port-Channel),你就不能把 Port 分配到不同的 Bridge。必須把所有 L2 介面都放在同一個預設的 Bridge 裡。
高級 L2 功能受限
一旦你啟用多個 Bridge,以下這些高級 L2 封包處理功能將無法使用:
VXLAN 相關限制
除非有非常特殊的 L2 隔離需求,例如需要一個 L2 版本的 VRF,否則官方強烈建議整台 Cumulus 設備只使用一個 VLAN-aware bridge (通常是預設的 bridge 或 br_default) 來處理所有的 L2 流量。
只有在單一 Bridge 的架構下,你才能使用 MLAG 和其他完整的 L2/VXLAN 功能。